import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;

import java.util.stream.Stream;


public class JunitTest3 {
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments("1,张三",
                "2,李四"));
    }

    @ParameterizedTest //这个注解的作用是将一个参数化测试方法转换成一个参数化测试类，
    //可以生成多个测试用例，每个测试用例都使用同样的测试方法，但是使用的是不同的参数
    @ValueSource(ints = {1, 2, 3})//单参数：不是单个的参数，而是说参数是单种形式的
    void test01(int num) {
        System.out.println(num);
    }

    @ParameterizedTest
    @CsvSource({"1, 2, 3, ''"})
    void test02(String x, String y, String z, String q) {
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
        System.out.println(q);
        System.out.println("================");
    }

    @ParameterizedTest
    @CsvFileSource(resources = "test02.csv")
    void test03(int num, String name) {
        System.out.println("学号：" + num + "，姓名：" + name);
    }

    @ParameterizedTest
    @MethodSource("Generator")
    void test04(String num, String name) {
        System.out.println(num + name);
    }

    //断言相等 断言不相等 断言为空 断言不为空
    @ParameterizedTest
    @ValueSource(ints = {1})
    void test04(int num) {
        System.out.println(num);
        Assertions.assertEquals(1, num);
        Assertions.assertNotEquals(2, num);
        String str = null;
        Assertions.assertNull(str);
    }
}
